﻿//#include <iostream>
//
//using namespace std;
//
//class Person {
//public:
//	virtual void buy() { std::cout << "Person:全价\n"; }
//};
//
//class Student : public Person {
//public:
//	virtual void buy() { std::cout << "Student:半价\n"; }
//};
//
//static void func(Person& p) { p.buy(); }
//
//int main()
//{
//	Person a; Student b;
//	func(a);
//	func(b);
//
//	return 0;
//}
//
//class Person {
//public:
//     ~Person() { cout << "~Person()" << endl; }  // 非虚析构函数
//};
//
//class Student : public Person {
//public:
//     ~Student() { cout << "~Student()" << endl; }  // 非虚析构函数
//};
//
//int main() {
//    Person* p = new Person();
//    delete p;  // 输出：~Person()
//
//    p = new Student();
//    delete p;  // 问题：只输出 ~Person()，没有调用 ~Student()
//
//    return 0;
//}

//class Person {
//public:
//	virtual void BuyTicket() {
//		cout << "买票-全价" << endl;
//		int _a = 1;
//	}
//};
//
//class Student : public Person {
//public:
//	virtual void BuyTicket() {
//		cout << "买票-半价" << endl;
//	}
//	int _b = 2;
//};
//
//void Func(Person& p) {
//	p.BuyTicket();
//}
//
//int main()
//{
//	Person Mike;
//	Student jason;
//
//	Func(Mike);
//	Func(jason);
//
//	return 0;
//}

#include <iostream>
using namespace std;

class Base1 {
public:
    virtual void func1() { cout << "Base1::func1" << endl; }
    virtual void func2() { cout << "Base1::func2" << endl; }
    int b1;
};

class Base2 {
public:
    virtual void func1() { cout << "Base2::func1" << endl; }
    virtual void func2() { cout << "Base2::func2" << endl; }
    int b2;
};

class Derive : public Base1, public Base2 {
public:
    virtual void func1() { cout << "Derive::func1" << endl; }
    virtual void func3() { cout << "Derive::func3" << endl; }
    int d1;
};

int main() {
    Derive d;

    // 验证函数调用行为
    Base1* pb1 = &d;
    Base2* pb2 = &d;

    cout << "通过Base1指针调用:" << endl;
    pb1->func1();  // 输出: Derive::func1
    pb1->func2();  // 输出: Base1::func2

    cout << "通过Base2指针调用:" << endl;
    pb2->func1();  // 输出: Derive::func1 (经过this调整)
    pb2->func2();  // 输出: Base2::func2

    cout << "对象大小: " << sizeof(d) << endl;  // 输出: 20(32位)

    return 0;
}